/*******************************************
  Jose Andres Lara Vecino

  Author       : $$Author: cainlara@gmail.com $$
  Last CheckIn : $$Date: 2012-10-04 14:13:10 +0000 (Thu, 04 Oct 2012) $$
  Revision     : $$Revision: 106 $$
*******************************************/

package control;

import java.io.Serializable;

import api.IGrupoUsuariosAPI;
import api.IProyectoAPI;
import api.IRolAPI;
import api.ISuiteAPI;
import api.IUsuarioAPI;
import api.impl.GrupoUsuariosAPI;
import api.impl.ProyectoAPI;
import api.impl.RolAPI;
import api.impl.SuiteAPI;
import api.impl.UsuarioAPI;
import frente.Usuario;
/**
 * Controlador de sesion en el sistema.
 * 
 * @author jose.lara 06.06.2012
 */
public class Sesion implements Serializable {
    private static final long serialVersionUID = 2636586961899807949L;
    
    private Usuario usuarioActual               = null;
    
    private ISuiteAPI suiteAPI                  = null;
    private IUsuarioAPI usuarioAPI              = null;
    private IProyectoAPI proyectoAPI            = null;
    private IRolAPI rolAPI                      = null;
    private IGrupoUsuariosAPI grupoUsuariosAPI  = null;
    
    private boolean iniciada                    = false;
    
    private Sesion() {
    }
    
    public static Sesion getInstance() {
        return SesionHolder.INSTANCE;
    }
    
    private static class SesionHolder {
        private static final Sesion INSTANCE = new Sesion();
    }

    public void iniciar(Usuario usuario) {
        setIniciada(true);
        setUsuarioActual(usuario);
    }
    
    public Usuario getUsuarioActual() {
        return usuarioActual;
    }

    public void setUsuarioActual(Usuario usuarioActual) {
        this.usuarioActual = usuarioActual;
    }

    public boolean isIniciada() {
        return iniciada;
    }
    
    public void setIniciada(boolean iniciada) {
        this.iniciada = iniciada;
    }
    
    public ISuiteAPI getSuiteAPI() {
        if(suiteAPI == null) {
            suiteAPI = new SuiteAPI();
        }
        
        return suiteAPI;
    }
    
    public IUsuarioAPI getUsuarioAPI() {
        if(usuarioAPI == null) {
            usuarioAPI = new UsuarioAPI();
        }
        
        return usuarioAPI;
    }
    
    public IProyectoAPI getProyectoAPI() {
        if(proyectoAPI == null) {
            proyectoAPI = new ProyectoAPI();
        }
        
        return proyectoAPI;
    }
    
    public IRolAPI getRolAPI() {
        if(rolAPI == null) {
            rolAPI = new RolAPI();
        }
        
        return rolAPI;
    }

    public IGrupoUsuariosAPI getGrupoUsuariosAPI() {
        if(grupoUsuariosAPI == null) {
            grupoUsuariosAPI = new GrupoUsuariosAPI();
        }
        
        return grupoUsuariosAPI;
    }
}